/**
 * @file device_led.h
 * @author canrad (1517807724@qq.com)
 * @brief LED灯的驱动
 *    初始化好对象后，可以通过led_xxx控制LED灯的亮灭
 *  参考代码：
 *      // 初始化LED灯
 *      led_t g_led1 = DEVICE_LED_INITIALIZER(GPIOC, GPIO_PIN_13, VALID_ON_LOW_LEVEL);
 *      // 开灯
 *      led_on(&g_led1);
 *      // 关灯
 *      led_off(&g_led1);
 *      // 切换灯的状态
 *      led_toggle(&g_led1);
 * @version 1.1
 * @date 2024-04-30
 * update 2024-08-16
 * @copyright Copyright (c) 2024
 *
 */
#ifndef MYLIB_DEVICE_LED_H
#define MYLIB_DEVICE_LED_H

#include <mylib/mylib_config.h>

// led灯的状态
typedef enum
{
    led_state_off,
    led_state_on
} led_state_enum;

typedef struct
{
    uint32_t gpio;
    int8_t valid;   // 标明这个灯是什么时候亮，如果为VALID_ON_HIGH_LEVEL，说明是高电平为有效
    led_state_enum state;   // 当前灯的状态
} led_t;

// 设备对象初始化器
#define DEVICE_LED_INITIALIZER(_gpio, _valid) \
    {                                         \
        .gpio  = _gpio,                       \
        .valid = _valid,                      \
        .state = led_state_off,               \
    }

void led_init(led_t* led, uint32_t gpio);

// 开灯
void led_on(led_t* led);
// 关灯
void led_off(led_t* led);
// 切换灯的状态
void led_toggle(led_t* led);

#endif   // !MYLIB_DEVICE_LED_H
